<?php
 /**
 * Fonctions de gestion des FILIGRANES pour buleltins et releves de notes
 * @package Garennes
 * @author Jean-Francois Campan <jean-francois.campan@ac-poitiers.fr>
 * @version 1.0
 */
 
 $polices [0][0][0] = 3 ;
 $polices [0][0][1] = 2 ; // Police par defaut
 $polices [0][0][2] = 2 ; // Version par defaut
 
 $polices [1][0][0] = "Courier" ;
 $polices [1][0][1] = 4 ;
 $polices [1][1][0] = "Courier" ;
 $polices [1][1][1] = "Normal" ;
 $polices [1][2][0] = "Courier-Bold" ;
 $polices [1][2][1] = "en Gras" ;
 $polices [1][3][0] = "Courier-Oblique" ;
 $polices [1][3][1] = "en Italique" ;
 $polices [1][4][0] = "Courier-BoldOblique" ;
 $polices [1][4][1] = "en Gras et Italique" ;
 
 $polices [2][0][0] = "Helvetica" ;
 $polices [2][0][1] = 4 ;
 $polices [2][1][0] = "Helvetica" ;
 $polices [2][1][1] = "Normal" ;
 $polices [2][2][0] = "Helvetica-Bold" ;
 $polices [2][2][1] = "en Gras" ;
 $polices [2][3][0] = "Helvetica-Oblique" ;
 $polices [2][3][1] = "en Italique" ;
 $polices [2][4][0] = "Helvetica-BoldOblique" ;
 $polices [2][4][1] = "en Gras et Italique" ;
 
 $polices [3][0][0] = "Times-Roman" ;
 $polices [3][0][1] = 4 ;
 $polices [3][1][0] = "Times-Roman" ;
 $polices [3][1][1] = "Normal" ;
 $polices [3][2][0] = "Times-Bold" ;
 $polices [3][2][1] = "en Gras" ;
 $polices [3][3][0] = "Times-Italic" ;
 $polices [3][3][1] = "en Italique" ;
 $polices [3][4][0] = "Times-BoldItalic" ;
 $polices [3][4][1] = "en Gras et Italique" ;
 
 /**
 * Fonction qui configure le filigrane par defaut pour un etablissement
 * @param int $id_etablisement Identifiant de l'etablisement a configurer
 */
 Function filigrane_activation_defaut ($id_etablissement)
  {
   Global $polices ;
   $init = restaure_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "INIT") ;
   If (($init == "") Or ($init == 0))
    {
     sauvegarde_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "ACTIVATION", 1) ;
     sauvegarde_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "TYPE", 1) ; // 1=Texte simple;2=Texte repete;3=Image
     sauvegarde_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "ORIENTATION", 1) ; // 1=Diagonale;2=Verticale;3=Horizontale
     sauvegarde_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "COULEUR_FOND", "1;1;1") ; // Si texte alors RGB
     sauvegarde_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "COULEUR_CONTOUR", "0.9;0.9;0.9") ; // Si texte alors RGB
     sauvegarde_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "OMBRE_ACTIVATION", 1) ; // Si texte
     sauvegarde_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "COULEUR_OMBRE", "0.95;0.95;0.95") ; // Si texte alors RGB
     sauvegarde_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "DECALAGE_OMBRE", "2;-4") ; // Si texte alors X;Y
     sauvegarde_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "POLICE", $polices [$polices [0][0][1]][$polices [0][0][2]][0]) ; // Police de caracteres du texte a afficher
     sauvegarde_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "TAILLE_POLICE", 20) ; // Si texte repete uniquement
     sauvegarde_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "TAILLE_CONTOUR", 1) ; // Si texte
     sauvegarde_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "TEXTE", "PROVISOIRE") ; // Texte a afficher
     sauvegarde_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "IMAGE", "filigrane_provisoire.jpg") ; // Image a afficher
     sauvegarde_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "MODE", 1) ; // 1=Actif si periode non finie;2=Actif permanent
     sauvegarde_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "INIT", 1) ; // "" ou 0=Non initialise;1=Initialise
    }
  }
 
 /**
 * Fonction qui detruit la configuration du filigrane par defaut pour un etablissement
 * @param int $id_etablisement Identifiant de l'etablisement a configurer
 */
 Function filigrane_desactivation_defaut ($id_etablissement)
  {
   $init = restaure_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "INIT") ;
   If ($init == 1)
    {
     detruire_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "ACTIVATION") ;
     detruire_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "TYPE") ;
     detruire_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "ORIENTATION") ;
     detruire_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "COULEUR_FOND") ;
     detruire_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "COULEUR_CONTOUR") ;
     detruire_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "OMBRE_ACTIVATION") ;
     detruire_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "COULEUR_OMBRE") ;
     detruire_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "DECALAGE_OMBRE") ;
     detruire_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "POLICE") ;
     detruire_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "TAILLE_POLICE") ;
     detruire_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "TAILLE_CONTOUR") ;
     detruire_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "TEXTE") ;
     detruire_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "IMAGE") ;
     detruire_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "MODE") ;
     detruire_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "INIT") ;
    }
  }
 
 /**
 * Initialisation complete des filigranes pour tous les etablissements du millesime considere
 * @param mixed $id_sql Identifiant SQL
 * @param int $millesime Annee de reference
 */
 Function filigrane_init ($id_sql, $millesime)
  {
   $etabs = SQL_commande ("SELECT id_etablissement FROM etablissements WHERE millesime='".$millesime."'", $id_sql) ;
   $nbr_etabs = SQL_nbr_lignes ($etabs) ;
   If ($nbr_etabs > 0)
    {
     For ($i = 0 ; $i < $nbr_etabs ; $i++)
      {
       $etab = SQL_ligne_suivante ($etabs) ;
       filigrane_activation_defaut ($etab [0]) ;
      }
    }
  }
 
 /**
 * Trace d'un filigrane
 * @param mixed $id_sql Identifiant SQL
 * @param int $millesime Annee de reference
 * @param int $id_etablissement Identifiant de l'etablisement
 * @param int $largeur Largeur de la page en pixel
 * @param int $hauteur Hauteur de la page en pixel
 * @param int $marge_gauche Marge de gauche en pixel
 * @param int $marge_droite Marge de droite en pixel
 * @param int $marge_haut Marge du haut en pixel
 * @param int $marge_bas Marge du bas en pixel
 * @param int $numero Numero de la page
 * @param int $type_page Type d'impression (1=Bulletin [defaut];2=Releve)
 */
 Function filigrane_trace ($id_sql, $millesime, $id_etablissement, $largeur, $hauteur, $marge_gauche, $marge_droite, $marge_haut, $marge_bas, $numero, $type_page)
  {
   Global $pdf, $page, $repertoire_logos_bulletins_racine, $repertoire_logos_releves_racine ;
   $init = restaure_configuration_defaut ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "INIT", 0) ;
   If ($init == 0) { filigrane_init ($id_sql, $millesime) ; }
   $activation = restaure_configuration_defaut ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "ACTIVATION", 1) ;
   If ($activation == 1)
    {
     $type_filigrane = restaure_configuration_defaut ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "TYPE", 1) ;
     Switch ($type_filigrane)
      {
       // Type Texte simple
       Default :
        Case 1 : $orientation = restaure_configuration_defaut ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "ORIENTATION", 1) ;
	         $c0 = restaure_configuration_defaut ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "COULEUR_FOND", "1;1;1") ;
                 $c1 = restaure_configuration_defaut ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "COULEUR_CONTOUR", "0.9;0.9;0.9") ;
                 $ombre = restaure_configuration_defaut ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "OMBRE_ACTIVATION", 1) ;
                 $c2 = restaure_configuration_defaut ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "COULEUR_OMBRE", "0.95;0.95;0.95") ;
                 $c3 = restaure_configuration_defaut ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "DECALAGE_OMBRE", "2;-4") ;
                 $police = restaure_configuration_defaut ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "POLICE", "Helvetica-Bold") ;
		 $contour = restaure_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "TAILLE_CONTOUR", 1) ;
                 $texte = restaure_configuration_defaut ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "TEXTE", "PROVISOIRE") ;
		 $c_f = Explode (";", $c0) ;
		 $c_c = Explode (";", $c1) ;
		 $c_o = Explode (";", $c2) ;
		 $decalage = Explode (";", $c3) ;
		 $param ["font"] = $police ;
                 $param ["width"] = $contour ;
                 $param ["mode"] = "fill+stroke" ;
		 Switch ($orientation)
		  {
		   // Diagonale
		   Default :
		    Case 1 : $largeur_page = $largeur-$marge_gauche-$marge_droite ;
                             $hauteur_page = $hauteur-$marge_haut-$marge_bas ;
                             $diagonale = Sqrt ($hauteur_page*$hauteur_page+$largeur_page*$largeur_page) ;
                             $angle = ATan ($hauteur_page/$largeur_page) ;
                             $param ["rotation"] = $angle*180/M_PI ;
                             $coeff = 2*Sqrt (1/(Sin ($angle)*Sin ($angle))-1) ;
                             // Determine la hauteur
                             $i = 12 ;
                             $ok = 0 ;
                             While (($i <= 500) And ($ok == 0))
                              {
                               $param ["height"] = $i ;
                               $longueur_texte = $pdf->StrLen ($texte, $param) ;
                               $reste = ($diagonale-$longueur_texte)/2 ;
                               If ($reste*$coeff < $i) { $ok = 1 ; }
                               $i++ ;
                              }
                             $deplacement = $param ["height"]*(1/2-1/4.8) ;
                             $x_depart = $marge_droite+$reste*Cos ($angle)+$deplacement*Sin ($angle) ;
                             $y_depart = $marge_bas+$reste*Sin ($angle)-$deplacement*Cos ($angle) ;
                             // Affichage ombre
			     If ($ombre == 1)
			      {
                               $param ["fred"] = $c_o [0] ; $param ["fgreen"] = $c_o [1] ; $param ["fblue"] = $c_o [2] ;
			       $param ["sred"] = $c_o [0] ; $param ["sgreen"] = $c_o [1] ; $param ["sblue"] = $c_o [2] ;
                               $pdf->Draw_Text ($x_depart+$decalage [0], $y_depart+$decalage [1], $texte, $page [$numero], $param) ;
			      }
                             // Affichage texte
                             $param ["fred"] = $c_f [0] ; $param ["fgreen"] = $c_f [1] ; $param ["fblue"] = $c_f [2] ;
                             $param ["sred"] = $c_c [0] ; $param ["sgreen"] = $c_c [1] ; $param ["sblue"] = $c_c [2] ;
                             $pdf->Draw_Text ($x_depart, $y_depart, $texte, $page [$numero], $param) ;
		             Break ;
		   // Verticale
		    Case 2 : $largeur_page = $largeur-$marge_gauche-$marge_droite ;
                             $hauteur_page = $hauteur-$marge_haut-$marge_bas ;
                             $param ["rotation"] = 90 ;
                             // Determine la hauteur
                             $i = 10 ;
                             $ok = 0 ;
                             While (($i <= 500) And ($ok == 0))
                              {
                               $param ["height"] = $i ;
                               $longueur_texte = $pdf->StrLen ($texte, $param) ;
                               $reste = ($hauteur_page-$longueur_texte)/2 ;
                               If ($reste < 0.1) { $ok = 1 ; }
                               $i++ ;
                              }
                             $x_depart = $marge_droite+($largeur_page-$param ["height"])/2+$param ["height"] ;
                             $y_depart = $marge_bas+$reste ;
                             // Affichage ombre
			     If ($ombre == 1)
			      {
			       $param ["fred"] = $c_o [0] ; $param ["fgreen"] = $c_o [1] ; $param ["fblue"] = $c_o [2] ;
			       $param ["sred"] = $c_o [0] ; $param ["sgreen"] = $c_o [1] ; $param ["sblue"] = $c_o [2] ;
                               $pdf->Draw_Text ($x_depart+$decalage [1], $y_depart+$decalage [0], $texte, $page [$numero], $param) ;
			      }
                             // Affichage texte
			     $param ["fred"] = $c_f [0] ; $param ["fgreen"] = $c_f [1] ; $param ["fblue"] = $c_f [2] ;
                             $param ["sred"] = $c_c [0] ; $param ["sgreen"] = $c_c [1] ; $param ["sblue"] = $c_c [2] ;
                             $pdf->Draw_Text ($x_depart, $y_depart, $texte, $page [$numero], $param) ;
		             Break ;
		   // Horizontale
		    Case 3 : $largeur_page = $largeur-$marge_gauche-$marge_droite ;
                             $hauteur_page = $hauteur-$marge_haut-$marge_bas ;
                             $param ["rotation"] = 0 ;
                             // Determine la largeur
                             $i = 10 ;
                             $ok = 0 ;
                             While (($i <= 500) And ($ok == 0))
                              {
                               $param ["height"] = $i ;
                               $longueur_texte = $pdf->StrLen ($texte, $param) ;
                               $reste = ($largeur_page-$longueur_texte)/2 ;
                               If ($reste < 0.1) { $ok = 1 ; }
                               $i++ ;
                              }
                             $x_depart = $marge_droite+$reste ;
                             $y_depart = $marge_bas+($hauteur_page-$param ["height"])/2+$param ["height"] ;
                             // Affichage ombre
			     If ($ombre == 1)
			      {
			       $param ["fred"] = $c_o [0] ; $param ["fgreen"] = $c_o [1] ; $param ["fblue"] = $c_o [2] ;
			       $param ["sred"] = $c_o [0] ; $param ["sgreen"] = $c_o [1] ; $param ["sblue"] = $c_o [2] ;
                               $pdf->Draw_Text ($x_depart+$decalage [0], $y_depart+$decalage [1], $texte, $page [$numero], $param) ;
			      }
                             // Affichage texte
			     $param ["fred"] = $c_f [0] ; $param ["fgreen"] = $c_f [1] ; $param ["fblue"] = $c_f [2] ;
                             $param ["sred"] = $c_c [0] ; $param ["sgreen"] = $c_c [1] ; $param ["sblue"] = $c_c [2] ;
                             $pdf->Draw_Text ($x_depart, $y_depart, $texte, $page [$numero], $param) ;
		             Break ;
		  }
	         Break ;
       // Type Texte repete horizontal
	Case 2 : $c0 = restaure_configuration_defaut ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "COULEUR_FOND", "1;1;1") ;
                 $c1 = restaure_configuration_defaut ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "COULEUR_CONTOUR", "0.9;0.9;0.9") ;
		 $police = restaure_configuration_defaut ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "POLICE", "Helvetica-Bold") ;
		 $taille_police = restaure_configuration_defaut ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "TAILLE_POLICE", 20) ;
		 $contour = restaure_configuration ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "TAILLE_CONTOUR", 1) ;
                 $t = restaure_configuration_defaut ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "TEXTE", "PROVISOIRE") ;
		 $c_f = Explode (";", $c0) ;
		 $c_c = Explode (";", $c1) ;
		 $c_o = Explode (";", $c2) ;
		 $tt = "" ;
		 For ($i = 0 ; $i < StrLen ($t) ; $i++)
		  {
		   $tt .= $t [$i]." " ;
		  }
	         $texte = Str_Repeat ($tt, 1000) ;
	         $param ["font"] = $police ;
                 $param ["height"] = $taille_police ;
                 $param ["width"] = $contour ;
                 $param ["rotation"] = 0 ;
                 $param ["mode"] = "fill+stroke" ;
		 $param ["fred"] = $c_f [0] ; $param ["fgreen"] = $c_f [1] ; $param ["fblue"] = $c_f [2] ;
                 $param ["sred"] = $c_c [0] ; $param ["sgreen"] = $c_c [1] ; $param ["sblue"] = $c_c [2] ;
                 $pdf->Draw_One_Paragraph ($hauteur-$marge_haut, $marge_droite, $marge_bas, $largeur-$marge_droite, $texte, $page [$numero], $param) ;
	         Break ;
       // Type Image
	Case 3 : $image = restaure_configuration_defaut ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "IMAGE", "filigrane_provisoire.jpg") ;
		 If ($type_page != 2) { $rep = $repertoire_logos_bulletins_racine ; } Else { $rep = $repertoire_logos_releves_racine ; }
                 If (StrToUpper (SubStr (PHP_OS, 0, 3) == "WIN")) { $fiche = $rep."\\".$image ; } Else { $fiche = $rep."/".$image ; }
	         If (File_Exists ($fiche) And (!Is_Dir ($file)))
                  {
                   // Lecture du logo
                   $fi = @FOpen ($fiche, "r") ;
                   If ($fi)
                    {
                     $fichier_image = @FRead ($fi, FileSize ($fiche)) ;
                     @FClose ($fi) ;
                     // Preparation de l'affichage
                     $image = $pdf->JFIF_Embed ($fichier_image) ;
                     // Taille de l'image
                     $taille_image = $pdf->Get_Image_Size ($image) ;
                     If (($taille_image ["width"] != 0) And ($taille_image ["height"] != 0))
                      {
		       $largeur_page = $largeur-$marge_gauche-$marge_droite ;
                       $hauteur_page = $hauteur-$marge_haut-$marge_bas ;
		       $orientation = restaure_configuration_defaut ("SYSTEME_PARAM", "BULLETIN_FILIGRANE_".$id_etablissement, "ORIENTATION", 1) ;
		       // Remise a l'echelle
		       Switch ($orientation)
		        {
			 // Diagonale
			  Case 1 : $diagonale = Sqrt ($hauteur_page*$hauteur_page+$largeur_page*$largeur_page) ;
                                   $angle = ATan ($hauteur_page/$largeur_page) ;
                                   $reste = ($diagonale-$taille_image ["width"])*Sqrt (1/(Sin ($angle)*Sin ($angle))-1) ;
                                   If ($reste < 0) { $echelle_image = 1+$reste/$taille_image ["height"] ; }
                                   Else { $echelle_image = $reste/$taille_image ["height"] ; }
                                   $reste = ($diagonale-$taille_image ["width"]*$echelle_image)/2 ;
                                   $deplacement = $taille_image ["height"]*$echelle_image/2 ;
				   $angle_image = $angle*180/M_PI ;
                                   $x_depart = $marge_droite+$reste*Cos ($angle)+$deplacement*Sin ($angle) ;
                                   $y_depart = $marge_bas+$reste*Sin ($angle)-$deplacement*Cos ($angle) ;
			           Break ;
			 // Verticale
			  Case 2 : $echelle_image = $hauteur_page/$taille_image ["width"] ;
			           $angle_image = 90 ;
                                   $x_depart = $marge_gauche+($largeur_page-$taille_image ["height"]*$echelle_image)/2+$taille_image ["height"]*$echelle_image ;
                                   $y_depart = $marge_bas+($hauteur_page-$taille_image ["width"]*$echelle_image)/2 ;
			           Break ;
			 // Horizontale
			 Default :
			  Case 3 : $echelle_image = $largeur_page/$taille_image ["width"] ;
			           $angle_image = 0 ;
                                   $x_depart = $marge_gauche+($largeur_page-$taille_image ["width"]*$echelle_image)/2 ;
                                   $y_depart = $marge_bas+($hauteur_page-$taille_image ["height"]*$echelle_image)/2 ;
			           Break ;
			}
		       $pdf->Image_Place ($image, $y_depart, $x_depart, $page [$numero], $echelle_image, $angle_image) ;
		      }
		    }
		  }
	         Break ;
      }
    }
  }
?>